package com.warom.sdg.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.google.gson.Gson;
import com.warom.sdg.model.UserEntity;

/**
 * 用户首选项工具类
 * 封装SharedPreferences操作，用于管理用户登录信息
 */
public class UserPreferencesUtil {
    private static final String TAG = "UserPreferencesUtil";
    private static final String PREF_NAME = "user_prefs";
    private static final String KEY_CURRENT_USER = "current_user";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_USER_ROLE = "user_role";

    /**
     * 获取SharedPreferences实例
     * @param context 上下文
     * @return SharedPreferences实例
     */
    private static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }

    /**
     * 保存当前用户信息到SharedPreferences
     * @param context 上下文
     * @param user 用户实体
     */
    public static void saveCurrentUser(Context context, UserEntity user) {
        try {
            SharedPreferences.Editor editor = getSharedPreferences(context).edit();
            if (user != null) {
                // 使用Gson将用户对象转换为JSON字符串
                Gson gson = new Gson();
                String userJson = gson.toJson(user);
                editor.putString(KEY_CURRENT_USER, userJson);
                editor.putString(KEY_USERNAME, user.getUsername());
                editor.putString(KEY_USER_ROLE, user.getRole());
            } else {
                // 如果user为null，则清除用户信息
                editor.remove(KEY_CURRENT_USER);
                editor.remove(KEY_USERNAME);
                editor.remove(KEY_USER_ROLE);
            }
            editor.apply();
        } catch (Exception e) {
            Log.e(TAG, "保存用户信息到SharedPreferences失败: " + e.getMessage());
        }
    }

    /**
     * 从SharedPreferences获取当前用户信息
     * @param context 上下文
     * @return 当前用户实体，如果未登录则返回null
     */
    public static UserEntity getCurrentUser(Context context) {
        try {
            String userJson = getSharedPreferences(context).getString(KEY_CURRENT_USER, null);
            if (userJson != null) {
                return new Gson().fromJson(userJson, UserEntity.class);
            }
        } catch (Exception e) {
            Log.e(TAG, "从SharedPreferences获取用户信息失败: " + e.getMessage());
        }
        return null;
    }

    /**
     * 从SharedPreferences获取当前用户名
     * @param context 上下文
     * @return 当前用户名，如果未登录则返回null
     */
    public static String getCurrentUsername(Context context) {
        try {
            return getSharedPreferences(context).getString(KEY_USERNAME, null);
        } catch (Exception e) {
            Log.e(TAG, "从SharedPreferences获取用户名失败: " + e.getMessage());
            return null;
        }
    }

    /**
     * 从SharedPreferences获取当前用户角色
     * @param context 上下文
     * @return 当前用户角色，如果未登录则返回null
     */
    public static String getCurrentUserRole(Context context) {
        try {
            return getSharedPreferences(context).getString(KEY_USER_ROLE, null);
        } catch (Exception e) {
            Log.e(TAG, "从SharedPreferences获取用户角色失败: " + e.getMessage());
            return null;
        }
    }

    /**
     * 清除当前用户信息（用于登出）
     * @param context 上下文
     */
    public static void clearCurrentUser(Context context) {
        try {
            SharedPreferences.Editor editor = getSharedPreferences(context).edit();
            editor.remove(KEY_CURRENT_USER);
            editor.remove(KEY_USERNAME);
            editor.remove(KEY_USER_ROLE);
            editor.apply();
            Log.d(TAG, "当前用户信息已从SharedPreferences清除");
        } catch (Exception e) {
            Log.e(TAG, "清除SharedPreferences中的用户信息失败: " + e.getMessage());
        }
    }
} 